package com.mmaingenieria.GestorFacturacion.model;

import com.mmaingenieria.GestorFacturacion.beans.Usuario;
import com.mmaingenieria.GestorFacturacion.enumeraciones.Rol;
import com.mmaingenieria.GestorFacturacion.model.interfaces.InterfaceUsuarioDAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.ResourceBundle;

/**
 *
 * @author Mikle
 */
public class MySqlUsuarioDAO implements InterfaceUsuarioDAO{

    
    //creamos un resouceBoundle que leera el archivo excepciones.properties
    //y segun la variable escribira una cosa u otra.
    private static ResourceBundle rb;
    
    //Construtor
    //*************************************************************************
    public MySqlUsuarioDAO() {
        //decimos que lea dicho archivo
        //rb = ResourceBundle.getBundle("com.mmaingenieria.GestorFacturacion.exceptions.excepciones");
    }
    
    
    //Metodos que hay que implementar por extender de InterfaceUsuario
    //*************************************************************************
    public synchronized ArrayList<Usuario> getUsuarios() {
        ArrayList<Usuario> listausuarios = null;//creo un arraylist de tipo usuarios
        Connection conexion = null;
        String sql = null;

        sql = "SELECT usuario_id, dni, nombre, apellido1,apellido2, usuario, password, email, date_created, rol, estado FROM usuario";
        //sql = "SELECT * FROM usuarios";
        try {
            conexion = MySqlDAOFactory.conectar();
        } catch (Exception ex) {
        }

        try {
            PreparedStatement stmt = conexion.prepareStatement(sql);//preparas la query
            ResultSet resultadoquery = stmt.executeQuery();//realizas la query
            listausuarios = new ArrayList<Usuario>();
            while (resultadoquery.next()) {//recorres el resultado
                listausuarios.add(instanciarUsuario(resultadoquery));//por cada recordset lo pasa a usuario y lo añades a la lista
            }
        } catch (SQLException ex) {
        } finally {
            MySqlDAOFactory.desconectar(conexion);
        }

        return listausuarios;
    }
    //Metodo para recoger usuario por nombre
    public synchronized Usuario getUsuarioByName (String nombre) {
    	Connection conexion = null;
        String sql = null;
        String sqlCompleta =null;
                
        sql = "SELECT usuario_id, dni, nombre, apellido1,apellido2, usuario, password, email, date_created, rol, estado FROM mma.usuario WHERE usuario='";
        sql= sql.concat(nombre);
        sqlCompleta =sql.concat("'");
        try {
            conexion = MySqlDAOFactory.conectar();
        } catch (Exception ex) {
        }
        
        Usuario usuario = new Usuario();
        
        try {
            PreparedStatement stmt = conexion.prepareStatement(sqlCompleta);//preparas la query
            //stmt.setString (1,nombre);
            //System.out.println(sqlCompleta);
            ResultSet resultadoquery = stmt.executeQuery();//realizas la query        
            
            while (resultadoquery.next()) {//recorres el resultado
            	usuario =instanciarUsuario(resultadoquery);//
            }
            
            
        
        } catch (SQLException ex) {
        } finally {
            MySqlDAOFactory.desconectar(conexion);
        }
        return usuario;
    }
    
    
    
    //Metodos
    //*************************************************************************
    public Usuario instanciarUsuario(ResultSet rs) {
        Usuario usuario = null;
        try {
            usuario = new Usuario();
            usuario.setId(rs.getInt("usuario_id"));
            usuario.setDni(rs.getString("dni"));
            usuario.setNombre(rs.getString("nombre"));
            usuario.setApellido1(rs.getString("apellido1"));
            usuario.setApellido2(rs.getString("apellido2"));
            usuario.setUsuario(rs.getString("usuario"));
            usuario.setPassword(rs.getString("password"));
            usuario.setEmail(rs.getString("email"));
            usuario.setEstado(rs.getInt("estado"));
            usuario.setDateCreated(rs.getLong("date_created"));
            usuario.setRol(rs.getInt("rol"));
        } catch (SQLException ex) {
        }

        //System.out.println(usuario.getNombre());
        return usuario;
    }

    
    
    
    
}
